package com.examstack.management.security;

import com.examstack.common.domain.question.Question;
import com.examstack.management.service.QuestionService;

import java.util.ArrayList;
import java.util.List;

public class QuestionUtil {

    /**
     * 判断该试题是否重复
     * 逻辑：获取传入的题目字符串，生成小于题目长度的随机数，第一次查询依据该随机数截取小于4个单位长度的字符串在数据库进行查询，
     * 获取返回的question对象；第二次筛选基于第一次返回的question对象进行校对，获取随机字符串与list中的对象进行比较，不匹配直接remove；
     * 第三次重复第二次校对，比较三次后如果list为空则说明不存在相同的，否则判断为试题重复。通过截取字符串最小值和循环次数控制筛选粒度
     * @param str
     * @return
     */
    public static boolean checkReaptQuestion(QuestionService questionService,String str, int fieldId){
        str=str.trim();//去除空格
        List<Question> questionList=new ArrayList<Question>();
        int count=0;
        do{
            //记录操作次数
            count++;
            //获取小于字符串长度的随机数
            int rand=(int)(4+Math.random()*(str.length()-4+1));
            //根据随机数截取题目中随机位置的字符串
            String content=str.substring(rand-4,rand);

            if(count==1){//第一次查询
                questionList=questionService.getQuestionListByContent(content,fieldId);
            }else{
                //第二次和第三次进行筛选
                for(int i=questionList.size()-1;i>=0;i--){
                    if(!questionList.get(i).getContent().contains(content)){
                        questionList.remove(i);
                    }
                }
            }

        }while (questionList.size()>0&&count<4);
        //判断比对结果
        if(questionList.size()>0){
            return true;
        }else {
            return false;
        }
    }
}
